/**
 * 监控数据格式验证中间件模块
 * 提供监控数据格式验证功能，确保上报的数据符合预期格式
 */
const { badRequest } = require('../utils/response');

/**
 * 监控数据格式验证中间件
 * 确保上报的数据符合预期格式，包括sessionId、data数组以及每条数据的必要字段
 */
const validateMonitorData = (req, res, next) => {
    const { sessionId, data, timestamp, url, userid } = req.body;
    
    // 基本参数验证
    if (sessionId && typeof sessionId !== 'string') {
        return badRequest(req, res, 'sessionId必须是有效的字符串');
    }
    
    if (!data || !Array.isArray(data)) {
        return badRequest(req, res, 'data必须是数组');
    }
    
    // 对每条数据进行基础验证
    for (let i = 0; i < data.length; i++) {
        const item = data[i];
        
        // 确保每条数据都有必要的类型信息
        if (!item.type) {
            // 根据数据内容推断类型
            if (item.message || item.errorType || item.stack) {
                item.type = 'error';
                item.reporttype = 'error';
            } else if (item.metrics || item.performance) {
                item.type = 'performance';
                item.reporttype = 'performance';
            } else {
                item.type = 'behavior';
                item.reporttype = 'behavior';
            }
        }
        
        // 确保有reporttype字段
        if (!item.reporttype) {
            item.reporttype = item.type === 'error' ? 'error' : 
                             item.type === 'performance' ? 'performance' : 
                             item.type === 'behavior' ? 'behavior' : 'monitor';
        }
        
        // 确保有category字段
        if (!item.category) {
            item.category = 'general';
        }
    }
    
    next();
};

module.exports = validateMonitorData;